/**
    算法描述：
    核心问题：
    解决所需数据结构+算法：
**/
#include<iostream>
#include<algorithm>
#include<iomanip>
using namespace std;
int N, T;

struct Good {
    /* data */
    double w, v, p;
} good[110];

bool cmp(Good a, Good b) {return a.p > b.p;}

int main() {
    double ans = 0;
    cin >> N >> T;
    for(int i=0; i<N; i++) {
        cin >> good[i].w >> good[i].v;
        good[i].p = good[i].v / good[i].w;
    }
    sort(good, good+N, cmp);
    // for(int i=0; i<N; i++)  cout << good[i].w << " ";
    for(int i=0; i<N; i++) {
        if(T >= good[i].w) {
            ans += good[i].v;
            T -= good[i].w;
        } else {
            ans += good[i].p * T;
            break;
        }
    }
    // printf("%.2lf\n", ans);
    cout << fixed << setprecision(2) << ans << endl;
    
    return 0;
}